package com.yds.modewithprinceple.factory;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.yds.modewithprinceple.R;
import com.yds.modewithprinceple.databinding.ActivityFactoryPatternBinding;
import com.yds.modewithprinceple.factory.image.abstracts.GlideEngine;
import com.yds.modewithprinceple.factory.image.abstracts.ImageLoadFactory;
import com.yds.modewithprinceple.factory.image.interfaces.ImageLoadManager;

/**
 * 工厂模式
 * <p>
 * 工厂模式是创建型模式，使我们常用/常见的模式之一,
 * 多用于需要生成复杂对象的地方,用new就可以完成创建的对象就无需使用。
 * <p>
 * 工厂模式降低了对象之间的耦合度，由于工厂模式依赖抽象的架构，
 * 实例化的任务交由子类去完成，所以有很好的扩展性。
 * <p>
 * Product：产品的基类，通常有抽象类或者接口来充当，用来统一接口，不关心细节的实现
 * ConcreteProduct：Product的具体实现类
 * Factory：工厂类，用来创建对象，可以根据参数的不同返回不同的Product对象，实现逻辑封装在其内部
 *
 * <p>
 * 定义：一个用于创建对象的接口，让子类决定实例化哪个类
 * 普通工厂模式：生产具体的产品，创建的产品是类(Class)
 * 抽象工厂模式：生产抽象的产品，创建的产品是接口(Interface)
 */
@SuppressWarnings("all")
public class FactoryPatternActivity extends AppCompatActivity {
    private ActivityFactoryPatternBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityFactoryPatternBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.tvFactoryIntroduce.setText("/**\n" +
                " * 工厂模式\n" +
                " * <p>\n" +
                " * 工厂模式是创建型模式，使我们常用/常见的模式之一,\n" +
                " * 多用于需要生成复杂对象的地方,用new就可以完成创建的对象就无需使用。\n" +
                " * <p>\n" +
                " * 工厂模式降低了对象之间的耦合度，由于工厂模式依赖抽象的架构，\n" +
                " * 实例化的任务交由子类去完成，所以有很好的扩展性。\n" +
                " * <p>\n" +
                " * Product：产品的基类，通常有抽象类或者接口来充当，用来统一接口，不关心细节的实现\n" +
                " * ConcreteProduct：Product的具体实现类\n" +
                " * Factory：工厂类，用来创建对象，可以根据参数的不同返回不同的Product对象，实现逻辑封装在其内部\n" +
                " *\n" +
                " * <p>\n" +
                " * 定义：一个用于创建对象的接口，让子类决定实例化哪个类\n" +
                " * 普通工厂模式：生产具体的产品，创建的产品是类(Class)\n" +
                " * 抽象工厂模式：生产抽象的产品，创建的产品是接口(Interface)\n" +
                " */");

        /**
         * 抽象工厂模式：生产抽象的产品，创建的产品是接口(Interface)
         */
        ImageLoadManager.load().displayGif(FactoryPatternActivity.this,
//                 "https://img0.baidu.com/it/u=791459587,3434376986&fm=26&fmt=auto&gp=0.jpg",
                R.mipmap.live_icon,
                binding.ivFactoryLeft,
                -1, -1);

        ImageLoadManager.load(ImageLoadManager.TYPE_XUTILS).displayGif(FactoryPatternActivity.this,
//                "https://img0.baidu.com/it/u=791459587,3434376986&fm=26&fmt=auto&gp=0.jpg",
                "assets://live_icon.gif",
                binding.ivFactoryRight,
                -1, -1);

        /**
         * 普通工厂模式：生产具体的产品，创建的产品是类(Class)
         */
        ImageLoadManager.load(GlideEngine.class).displayGif(FactoryPatternActivity.this,
//                 "https://img0.baidu.com/it/u=791459587,3434376986&fm=26&fmt=auto&gp=0.jpg",
                R.mipmap.live_icon,
                binding.ivFactoryLeft,
                -1, -1);

    }

}